class ComentariosController < ApplicationController
  
   before_filter :get_usuario, :only => [:create]

  def get_usuario
    if params[:nombre]
      if usuario = Usuario.find_by_nombre(params[:nombre])
        @usuario = usuario
      else
        redirect_to(root_path, :notice => "No existe un usuario asociado!")
      end
    elsif session[:usuario_id]
      @usuario = Usuario.find(session[:usuario_id])
    else
      redirect_to(root_path, :notice => "No existe un usuario asociado#!")
    end
  end 
  
  # GET /comentarios
  # GET /comentarios.xml
  def index
    @comentarios = Comentario.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @comentarios }
    end
  end

  # GET /comentarios/1
  # GET /comentarios/1.xml
  def show
    @comentario = Comentario.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @comentario }
    end
  end

  # GET /comentarios/new
  # GET /comentarios/new.xml
  def new
    @comentario = Comentario.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @comentario }
    end
  end

  # GET /comentarios/1/edit
  def edit
    @comentario = Comentario.find(params[:id])
  end

  # POST /comentarios
  # POST /comentarios.xml
  def create
    
    @comentable = find_comentable
    @comentario = @comentable.comentarios.build(params[:comentario])
    @comentario.usuario_id = @usuario.id
    respond_to do |format|
      if @comentario.save
        format.html { redirect_to :back }
        format.xml  { render :xml => @comentario, :status => :created, :location => @comentario }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @comentario.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /comentarios/1
  # PUT /comentarios/1.xml
  def update
    @comentario = Comentario.find(params[:id])

    respond_to do |format|
      if @comentario.update_attributes(params[:comentario])
        format.html { redirect_to(@comentario, :notice => 'Comentario was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @comentario.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /comentarios/1
  # DELETE /comentarios/1.xml
  def destroy
    @comentario = Comentario.find(params[:id])
    @comentario.destroy

    respond_to do |format|
      format.html { redirect_to(comentarios_url) }
      format.xml  { head :ok }
    end
  end
  
  def find_comentable
    params.each do |name, value|
      if name =~ /(.+)_id$/
        return $1.classify.constantize.find(value)
      end
    end
    nil
  end
  
end
